home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch12 / Show2D.frm < prev    next >
Text File  |  1999-06-16  |  8KB  |  264 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
  3. Begin VB.Form frmShow2D 
  4.    Caption         =   "Show2D"
  5.    ClientHeight    =   4365
  6.    ClientLeft      =   2415
  7.    ClientTop       =   1650
  8.    ClientWidth     =   5355
  9.    LinkTopic       =   "Form1"
  10.    PaletteMode     =   1  'UseZOrder
  11.    ScaleHeight     =   4365
  12.    ScaleWidth      =   5355
  13.    Begin MSComDlg.CommonDialog dlgFile 
  14.       Left            =   240
  15.       Top             =   360
  16.       _ExtentX        =   847
  17.       _ExtentY        =   847
  18.       _Version        =   393216
  19.       CancelError     =   -1  'True
  20.    End
  21.    Begin VB.PictureBox picCanvas 
  22.       Height          =   2415
  23.       Left            =   0
  24.       ScaleHeight     =   157
  25.       ScaleMode       =   3  'Pixel
  26.       ScaleWidth      =   157
  27.       TabIndex        =   0
  28.       Top             =   0
  29.       Width           =   2415
  30.    End
  31.    Begin VB.Menu mnuFile 
  32.       Caption         =   "&File"
  33.       Begin VB.Menu mnuFileOpen 
  34.          Caption         =   "&Open..."
  35.          Shortcut        =   ^O
  36.       End
  37.       Begin VB.Menu mnuFileSave2D 
  38.          Caption         =   "Save &2D File..."
  39.          Shortcut        =   ^S
  40.       End
  41.       Begin VB.Menu mnuFileSaveMetafile 
  42.          Caption         =   "Save &Metafile..."
  43.          Shortcut        =   ^M
  44.       End
  45.    End
  46. End
  47. Attribute VB_Name = "frmShow2D"
  48. Attribute VB_GlobalNameSpace = False
  49. Attribute VB_Creatable = False
  50. Attribute VB_PredeclaredId = True
  51. Attribute VB_Exposed = False
  52. Option Explicit
  53.  
  54. ' The scene that contains all other objects.
  55. Private TheScene As TwoDObject
  56.  
  57. Private Declare Function CreateMetaFile Lib "gdi32" Alias "CreateMetaFileA" (ByVal lpString As String) As Long
  58. Private Declare Function CloseMetaFile Lib "gdi32" (ByVal hmf As Long) As Long
  59. Private Declare Function DeleteMetaFile Lib "gdi32" (ByVal hmf As Long) As Long
  60. Private Declare Function SetWindowExtEx Lib "gdi32" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpSize As SIZE) As Long
  61. Private Type SIZE
  62.     cx As Long
  63.     cy As Long
  64. End Type
  65.  
  66. ' Save the object serialization.
  67. Private Sub mnuFileSave2D_Click()
  68. Dim file_name As String
  69. Dim fnum As Integer
  70.  
  71.     If TheScene Is Nothing Then
  72.         MsgBox "No scene is loaded."
  73.         Exit Sub
  74.     End If
  75.  
  76.     ' Allow the user to pick a file.
  77.     On Error Resume Next
  78.     dlgFile.Filter = _
  79.         "2D Files (*.2d)|*.2d|" & _
  80.         "All Files (*.*)|*.*"
  81.     dlgFile.Flags = _
  82.         cdlOFNOverwritePrompt Or _
  83.         cdlOFNPathMustExist Or _
  84.         cdlOFNHideReadOnly
  85.     dlgFile.ShowSave
  86.     If Err.Number = cdlCancel Then
  87.         ' The user canceled.
  88.         Unload dlgFile
  89.         Exit Sub
  90.     ElseIf Err.Number <> 0 Then
  91.         ' Unknown error.
  92.         Unload dlgFile
  93.         MsgBox "Error " & Format$(Err.Number) & _
  94.             " selecting file." & vbCrLf & _
  95.             Err.Description, vbExclamation
  96.         Exit Sub
  97.     End If
  98.     On Error GoTo Save2DFileError
  99.  
  100.     ' Get the file name.
  101.     file_name = dlgFile.FileName
  102.     dlgFile.InitDir = Left$(file_name, Len(file_name) _
  103.         - Len(dlgFile.FileTitle) - 1)
  104.     Caption = "Show2D [" & dlgFile.FileTitle & "]"
  105.  
  106.     ' Open the file.
  107.     fnum = FreeFile
  108.     Open file_name For Output As fnum
  109.  
  110.     ' Write the serialization into the file.
  111.     Print #fnum, TheScene.Serialization
  112.  
  113.     ' Close the file.
  114.     Close fnum
  115.     Exit Sub
  116.  
  117. Save2DFileError:
  118.     MsgBox "Error " & Format$(Err.Number) & _
  119.         " saving file." & vbCrLf & _
  120.         Err.Description, vbExclamation
  121.     Exit Sub
  122. End Sub
  123.  
  124. Private Sub mnuFileSaveMetafile_Click()
  125. Dim file_name As String
  126. Dim mf_dc As Long
  127. Dim hmf As Long
  128. Dim old_size As SIZE
  129.  
  130.     If TheScene Is Nothing Then
  131.         MsgBox "No scene is loaded."
  132.         Exit Sub
  133.     End If
  134.  
  135.     ' Allow the user to pick a file.
  136.     On Error Resume Next
  137.     dlgFile.Filter = _
  138.         "Metafiles (*.wmf)|*.wmf|" & _
  139.         "All Files (*.*)|*.*"
  140.     dlgFile.Flags = _
  141.         cdlOFNOverwritePrompt Or _
  142.         cdlOFNPathMustExist Or _
  143.         cdlOFNHideReadOnly
  144.     dlgFile.ShowSave
  145.     If Err.Number = cdlCancel Then
  146.         ' The user canceled.
  147.         Unload dlgFile
  148.         Exit Sub
  149.     ElseIf Err.Number <> 0 Then
  150.         ' Unknown error.
  151.         Unload dlgFile
  152.         MsgBox "Error " & Format$(Err.Number) & _
  153.             " selecting file." & vbCrLf & _
  154.             Err.Description, vbExclamation
  155.         Exit Sub
  156.     End If
  157.     On Error GoTo SaveMetafileError
  158.  
  159.     ' Get the file name.
  160.     file_name = dlgFile.FileName
  161.     dlgFile.InitDir = Left$(file_name, Len(file_name) _
  162.         - Len(dlgFile.FileTitle) - 1)
  163.     Caption = "Show2D [" & dlgFile.FileTitle & "]"
  164.  
  165.     ' Create the metafile.
  166.     mf_dc = CreateMetaFile(ByVal file_name)
  167.     If mf_dc = 0 Then
  168.         MsgBox "Error creating the metafile.", vbExclamation
  169.         Exit Sub
  170.     End If
  171.  
  172.     ' Set the metafile's size to something reasonable.
  173.     SetWindowExtEx mf_dc, picCanvas.ScaleWidth, _
  174.         picCanvas.ScaleHeight, old_size
  175.  
  176.     ' Draw in the metafile.
  177.     TheScene.DrawInMetafile mf_dc
  178.  
  179.     ' Close the metafile.
  180.     hmf = CloseMetaFile(mf_dc)
  181.     If hmf = 0 Then
  182.         MsgBox "Error closing the metafile.", vbExclamation
  183.     End If
  184.  
  185.     ' Delete the metafile to free resources.
  186.     If DeleteMetaFile(hmf) = 0 Then
  187.         MsgBox "Error deleting the metafile.", vbExclamation
  188.     End If
  189.     Exit Sub
  190.  
  191. SaveMetafileError:
  192.     MsgBox "Error " & Format$(Err.Number) & _
  193.         " saving file." & vbCrLf & _
  194.         Err.Description, vbExclamation
  195.     Exit Sub
  196. End Sub
  197. Private Sub picCanvas_Paint()
  198.     If Not TheScene Is Nothing Then TheScene.Draw picCanvas
  199. End Sub
  200. Private Sub Form_Load()
  201.     dlgFile.InitDir = App.Path
  202.     dlgFile.Filter = "TwoD Files (*.2d)|*.2d|" & _
  203.         "All Files (*.*)|*.*"
  204.     dlgFile.CancelError = True
  205. End Sub
  206.  
  207. Private Sub Form_Resize()
  208.     picCanvas.Move 0, 0, ScaleWidth, ScaleHeight
  209. End Sub
  210.  
  211.  
  212. Private Sub mnuFileOpen_Click()
  213. Dim file_name As String
  214. Dim fnum As Integer
  215. Dim the_serialization As String
  216. Dim token_name As String
  217. Dim token_value As String
  218.  
  219.     ' Allow the user to pick a file.
  220.     On Error Resume Next
  221.     dlgFile.Flags = cdlOFNExplorer Or _
  222.         cdlOFNFileMustExist Or _
  223.         cdlOFNHideReadOnly Or _
  224.         cdlOFNLongNames
  225.     dlgFile.ShowOpen
  226.     If Err.Number = cdlCancel Then
  227.         Unload dlgFile
  228.         Exit Sub
  229.     ElseIf Err.Number <> 0 Then
  230.         Unload dlgFile
  231.         Beep
  232.         MsgBox "Error selecting file.", , vbExclamation
  233.         Exit Sub
  234.     End If
  235.     On Error GoTo 0
  236.  
  237.     ' Read the picture's serialization.
  238.     file_name = dlgFile.FileName
  239.     fnum = FreeFile
  240.     Open file_name For Input As #fnum
  241.     the_serialization = RemoveNonPrintables(Input$(LOF(fnum), fnum))
  242.     Close fnum
  243.  
  244.     ' Make sure this is a TwoDScene serialization.
  245.     GetNamedToken the_serialization, token_name, token_value
  246.     If token_name <> "TwoDScene" Then
  247.         ' This is not a valid serialization.
  248.         MsgBox "This is not a valid TwoDScene serialization."
  249.     Else
  250.         Caption = "Show2D [" & dlgFile.FileTitle & "]"
  251.         dlgFile.InitDir = Left$(file_name, Len(file_name) _
  252.             - Len(dlgFile.FileTitle) - 1)
  253.  
  254.         ' Initialize the new scene.
  255.         Set TheScene = New TwoDScene
  256.         TheScene.Serialization = token_value
  257.     End If
  258.  
  259.     ' Display the scene.
  260.     picCanvas.Cls
  261.     TheScene.Draw picCanvas
  262.     picCanvas.Refresh
  263. End Sub
  264.